const CODE_MESSAGE = {
  0: "SUCCESS",
  100001: "`useCase` 字段错误",
  100002: "短信发送失败",
  100003: "1分钟内只能发送一条短信",
  100004: "验证码错误",
  100005: "手机号登录失败",
  100100: "appid错误",
  100101: "授权回调地址缺失",
  100102: "应用未配置callback_uri不允许授权回调登录",
  100103: "redirect_uri错误",
  100104: "code 错误",
  100105: "app_secret 错误",
  100106: "refresh_token 错误",
  100107: "access_token 错误",
};

/** 返回分页信息 */
export interface BasePageInfo {
  /** 分页 */
  page: number;
  /** 每一页数量 */
  pageSize: number;
  /** 数据总量 */
  total: number;
}

/**
 * 标准的响应形式，所有的响应都调用该函数
 * @param {object} [data] - 响应数据
 * @param code     响应代码, 默认: 0
 * @param message  错误信息
 * @param {BasePageInfo} [pageInfo] 分页信息
 * @returns
 */
export function response(
  data: any = undefined,
  code = 0,
  message: string | null | undefined = null,
  pageInfo: BasePageInfo | undefined = undefined,
) {
  return {
    code,
    //@ts-ignore
    message: message || CODE_MESSAGE[code],
    data:
      pageInfo == null
        ? data
        : {
            data,
            page_info: responsePageInfo(
              pageInfo.page,
              pageInfo.pageSize,
              pageInfo.total,
            ),
          },
  };
}

/**
 * 返回分页信息
 */
export type ResponsePageInfo = {
  /**
   * 分页
   */
  page: number;
  /**
   * 每一页数量
   */
  pageSize: number;
  /**
   * 数据总量
   */
  total: number;
  /**
   * 总页数
   */
  totalPage: number;

  /**
   * 是否最后一页
   */
  isEnd: boolean;
};

/**
 * 生成返回的分页信息
 * @param {number} page       分页
 * @param {number} pageSize   每一页显示数量
 * @param {number} total      数据总量
 * @returns {ResponsePageInfo}
 */
export function responsePageInfo(
  page: number,
  pageSize: number,
  total: number,
): ResponsePageInfo {
  const totalPage = Math.ceil(total / (pageSize || 10));
  return {
    page: page || 1,
    pageSize: pageSize || 10,
    total,
    totalPage,
    isEnd: page >= totalPage,
  };
}
